package jhlee42;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;

import jhlee42.model.SungJuk2VO;

public class J19HashMap {

	public static void main(String[] args) {
		// ArrayList
		// 실무에서 빈번하게 사용되는 컬렉션 객체 중 하나
		// 배열과 달리 입력하는 데이터 갯수에 따라
		// 크키가 유동적으로 변함.
		// 동일한 값을 여러 개 저장할 수 있고,
		// 입력되는 값들은 순서를 가짐.
		
		ArrayList<String> woman = new ArrayList<>(); // 단일
		ArrayList<SungJuk2VO> sj = new ArrayList<>(); // 복수 // 위 보다는 아래를 많이 쓴다..
		
		//String[] s34 = s34 String[3];  	
		
		// 추가하기 add
		
		
		// woman 은 String 형태의 객체만 들어갈 수 있다.
		woman.add("태희");
		woman.add("혜교");
		woman.add("지현");
		sj.add(new SungJuk2VO("태희", 99, 98, 52));
		sj.add(new SungJuk2VO("혜교", 85, 20, 85));
		sj.add(new SungJuk2VO("지현", 54, 78, 56));
		
		// 하나씩 조회 get(위치(순서)) // 동적 배열
		
		// SungJuk2VO의 toString()에 의해 출력
		System.out.println(sj.get(0));
		System.out.println(sj.get(1));
		System.out.println(sj.get(2));
		
		// VO에 ToString 이 없다면... 각각 바로 가져와야한다.
		System.out.println(sj.get(0).getName());
		System.out.println(sj.get(1).getName());
		System.out.println(sj.get(2).getName());
		
		// 몽땅 출력 (for-each문 사용)
		// ArrayList<a>b = new ArrayList<>();
		// for(a ??? : b){}
		// for (요소유형 요소명 : arrayList객체명)
		for(String str:woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}
		
		// 수정하기 set(위치,값)
		System.out.println("*수정하기******************");
		woman.set(1,"수지");
		System.out.println(woman.get(1));
		
		// 객체 타입
		System.out.println("*******************");
		SungJuk2VO newONe = new SungJuk2VO("수정",78,32,45);
		System.out.println(sj.get(2));
		sj.set(2, newONe);
		System.out.println(sj.get(2));
		
		// 삭제 remove(위치)
		System.out.println("**삭제하기*****************");
		woman.remove(1);
		sj.remove(2);
		
		for(String str:woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}
		
		
		// 찾기 contains
		System.out.println("**찾기*****************");
		String key = "지현";
		
		if (woman.contains(key)){
			System.out.println("데이터가 존재합니다.");
			System.out.println(woman.indexOf(key)); // 몇 번 째 위치에 존재하는지 알 수 있다.
		}
		else{
			System.out.println("데이터가 없어요!");
		}
		
		System.out.println("**찾기2*****************");
/*		key ="지현";
		if (woman.get(1).contains(key)){
			System.out.println("데이터가 존재합니다.");
			System.out.println(woman.indexOf(key)); // 몇 번 째 위치에 존재하는지 알 수 있다.
		}
		else{
			System.out.println("데이터가 없어요!");
		}*/
		
		key ="태희";
		for(SungJuk2VO s : sj){
			if (s.getName().contains(key)){
				System.out.println("데이터가 존재합니다.");
				System.out.println(woman.indexOf(key)); // 몇 번 째 위치에 존재하는지 알 수 있다.
				break;
			}
			else{
				System.out.println("데이터가 없어요!");
			}
		}
		
		
		
		
		
		
		
		

		// 정렬 sort
		System.out.println("*정렬*****************");
		Collections.sort(woman);
		
		for(String str:woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}
	
		
		// 객체를 대상으로 정렬하려면
		// Comparator라는 인터페이스를 구현하고
		// Collection.sort(대상,정렬기준);
		// 으로 호출해서 사용해야됨..
		
		

		// 모두 삭제 clear
		System.out.println("**모두삭제*****************");
		woman.clear();
		sj.clear();
		for(String str:woman) {
			System.out.println(str);
		}
		for (SungJuk2VO s : sj) {
			System.out.println(s);
		}
		
	}
}
class NameSort implements Comparator<SungJuk2VO>{
	@Override
	public int compare(SungJuk2VO sj1, SungJuk2VO sj2) {
		return sj1.getName().compareTo(sj2.getName());
	}
}




